package ServidorDistribuido;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class HiloServidorEscritura implements Runnable{
    InetAddress ipCliente = null;
    Socket socketCliente = null;

    HiloServidorEscritura(InetAddress ipCliente, Socket socketCliente) {
        this.ipCliente = ipCliente;
        this.socketCliente = socketCliente;
    }

    public static void enviarInformacionAlServidor(Socket socket, String informacion){
            try {
                PrintWriter out = new PrintWriter(new BufferedWriter
                    (new OutputStreamWriter(socket.getOutputStream())), true);
                out.println(informacion);
            } catch (Exception ex) {
                Logger.getLogger(HiloPorServidorEscritura.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        public static void enviarEstadoEjecucion(Socket socket, InetAddress ip, boolean estado){
            try {
                PrintWriter out = new PrintWriter(new BufferedWriter
                    (new OutputStreamWriter(socket.getOutputStream())), true);
                String paraEnviar = "estadoEjecucion|" + ip.toString().split("[/]")[1] + "|" + estado;
                System.out.println("HSE: enviarEstadoEjecucion: " + paraEnviar);
                out.println(paraEnviar);
            } catch (Exception ex) {
                Logger.getLogger(HiloPorServidorEscritura.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

//        public static void enviarRelojLogico(Socket socket, int relojLogico){
//            try {
//                PrintWriter out = new PrintWriter(new BufferedWriter
//                    (new OutputStreamWriter(socket.getOutputStream())), true);
//                String paraEnviar = "relojLogico|" + relojLogico;
//                System.out.println("HSE: enviarRelojLogico: " + paraEnviar);
//                out.println(paraEnviar);
//            } catch (IOException ex) {
//                Logger.getLogger(HiloPorServidorEscritura.class.getName()).log(Level.SEVERE, null, ex);
//            }
//        }

//        public static void enviarVersionArchivo(Socket socket, String archivo, int version){
//            try {
//                PrintWriter out = new PrintWriter(new BufferedWriter
//                    (new OutputStreamWriter(socket.getOutputStream())), true);
//                String paraEnviar = "versionArchivo|" + archivo + "|" + version;
//                System.out.println("HSE: enviarVersionArchivo: " + paraEnviar);
//                out.println(paraEnviar);
//            } catch (IOException ex) {
//                Logger.getLogger(HiloPorServidorEscritura.class.getName()).log(Level.SEVERE, null, ex);
//            }
//        }

        public static void enviarCargaDeTrabajo(Socket socket, InetAddress ip, int cargaDeTrabajo){
            try {
                PrintWriter out = new PrintWriter(new BufferedWriter
                    (new OutputStreamWriter(socket.getOutputStream())), true);
                String paraEnviar = "cargaDeTrabajo|" + ip.toString().split("[/]")[1] + "|" + cargaDeTrabajo;
                System.out.println("HSE: enviarCargaDeTrabajo: " + paraEnviar);
                out.println(paraEnviar);
            } catch (Exception ex) {
                Logger.getLogger(HiloPorServidorEscritura.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        public static void enviarArchivosPorServidor(Socket socket, String archivo, int version, InetAddress ip){
            try {
                PrintWriter out = new PrintWriter(new BufferedWriter
                    (new OutputStreamWriter(socket.getOutputStream())), true);
                String paraEnviar = "archivosPorServidor|" + archivo + "|" + version + "|" + ip.toString().split("[/]")[1];
                System.out.println("HSE: enviarArchivosPorServidor: " + paraEnviar);
                out.println(paraEnviar);
                out.flush();
            } catch (Exception ex) {
                Logger.getLogger(HiloPorServidorEscritura.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        public static void enviarIpSocket(Socket socket, InetAddress ip, Socket socketTabla){
            try {
                PrintWriter out = new PrintWriter(new BufferedWriter
                    (new OutputStreamWriter(socket.getOutputStream())), true);
                String paraEnviar = "versionArchivo|" + ip.toString() + "|" + socketTabla.toString();
                System.out.println("HSE: enviarVersionArchivo: " + paraEnviar);
                out.println(paraEnviar);
            } catch (Exception ex) {
                Logger.getLogger(HiloPorServidorEscritura.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    public void run() {
        System.out.println("Comenzo la ejecucion de HiloServidorEscritura.");
        while(Servidor.servidorCreado);
    }

}
